package com.ukao.pad.base;

import java.util.List;

/**
 * 分页
 *
 * @author hiphonezhu@gmail.com
 * @version [Android-BaseLine, 16/9/19 15:29]
 */
public class PageWrapper<T> {
    IPage page;
    IAdapter<T> iAdapter;

    public PageWrapper(IAdapter<T> iAdapter, IPage page) {
        this.iAdapter = iAdapter;
        initPage(page);
    }

    /**
     * 初始化分页参数
     */
    private void initPage(IPage page) {
        this.page = page;
        this.page.setStartPageIndex(IPage.DEFAULT_START_PAGE_INDEX)
                .setPageSize(IPage.DEFAULT_PAGE_SIZE);
    }



    /**
     * 当前是否是第一页数据
     *
     * @return
     */
    public boolean isFirstPage() {
        return page.isFirstPage();
    }

    /**
     * 分页加载数据
     * [可能会抛出异常，请确认数据加载结束后，你已经调用了finishLoad(boolean success)方法]
     *
     * @param isFirstPage true: 第一页  false: 下一页
     */
    public void loadPage(boolean isFirstPage) {
        page.loadPage(isFirstPage);
    }

    /**
     * 加载结束
     *
     * @param success true：加载成功  false：失败(无数据)
     */
    public void finishLoad(boolean success) {
        page.finishLoad(success);
    }

    /**
     * 增加数据
     *
     * @param data
     */
    public final void addDataSource(List<T> data, int totalPage) {

        int pagenum = page.getPageSize();
        if (isFirstPage()) // 当前是第一页, 则重置数据源
        {
            if (pagenum > data.size()|| totalPage == page.getCurrPageIndex()){
                iAdapter.setDataSource(data,false);

            }else if (data.size()>=pagenum){

                iAdapter.setDataSource(data,true);

            }

        } else if (data != null) {


            if (pagenum > data.size() || totalPage <= page.getCurrPageIndex()) {

                iAdapter.loadMoreFinish(data, false);
            } else {
                iAdapter.loadMoreFinish(data, true);
            }

        }
        finishLoad(data != null && data.size() > 0);
    }

    /**
     * 起始下标递减
     */
    public void decreaseStartIndex() {
        page.decreaseStartIndex();
    }

    /**
     * 起始下标递减
     */
    public void decreaseStartIndex(int size) {
        page.decreaseStartIndex(size);
    }



}
